
/*
 * Esta es la parte inicial de la aplicacion...
 * eduApp : corresponde al nombre de la aplicación, el cual es la referencia para toda la aplicacion angular
 * eduApp.controllers (es el nombre de la implementación para manejar los controladores "usados para los formularios, para crear, listar, etc...")
 * eduApp.services    (es el nombre de la implementación para manejar los servicios usados "gestiones ajax para guardar información ")
 * 
 * Los demas datos son implementaciones angular 
 * 
 * (ui.router es para manejar las opciones de la aplicacion web...)
 * (ui.bootstrap es para programar por javascript componentes bootstrap)
 * (ngGrid es para crear tablas "conocidas como grid")
 * (angularFileUpload es para crear componentes para subir archivos al servidor)
 * */
var app = angular.module(
	'eduApp', 
	['eduApp.controllers',
	 'eduApp.services',
	 //'ngMap',
	 'ui.router',
	 'ui.bootstrap',
	 'ngGrid',
	 'ngAnimate',
	 'ngSanitize',
	 'mgcrea.ngStrap',
	 'angularFileUpload']);

  app
  .config(
	 function($httpProvider, $stateProvider, $urlRouterProvider) {
		/*
		 * Esta funcion define como se carga inicialmente nuestra aplicación...
		 * 
		 * Aqui comenzamos a usar el famoso (ui.route)...
		 * */
		$urlRouterProvider.otherwise("/modules/teacher");
		$stateProvider
		  /*
		   * Cada state define una opción de nuestra apliación... 
		   * En este caso definimos una llamada module y recibe argumentos, para definir
		   * que cosa queremos cargar (docentes, alumnos, de acuerdo a lo que quiera programar)...
		   * y este state define un controller, el cual es que gestiona esa ruta (modules)...
		   * */
		  .state('modules', {
             url         : '/modules/:module',
             views       : {
			    "container" : {
                   templateUrl : 'views/modules/index.html',
			       controller  : "ModuleDriver"
                }//end of container...
             }//End of view...
          })
   })
	 
  .constant('AUTH_EVENTS', {
     loginSuccess     : 'auth-login-success',
     loginFailed      : 'auth-login-failed',
     logoutSuccess    : 'auth-logout-success',
     sessionTimeout   : 'auth-session-timeout',
     notAuthenticated : 'auth-not-authenticated',
     notAuthorized    : 'auth-not-authorized'
  })
  
  .constant('USER_ROLES', {
     all    : '*',
     admin  : 'admin',
     editor : 'editor',
     guest  : 'guest'
  })
  
    
  .directive('ngBlur', function() {
      return function( scope, elem, attrs ) {
        elem.bind('blur', function() {
          scope.$apply(attrs.ngBlur);
        });
      };
  })
  .directive('ngFocus', function( $timeout ) {
      return function( scope, elem, attrs ) {
         scope.$watch(attrs.ngFocus, function( newval ) {
           if ( newval ) {
             $timeout(function() {
               elem[0].focus();
             }, 0, false);
           }
         });
       };
  })
  
  .value("rndAddToLatLon",function () {
      return Math.floor(((Math.random() < 0.5 ? -1 : 1) * 2) + 1)
  })
  
  
  .factory('StatusNewConstant'     , function(HTTP)  {
	  return estadoNoticiaVar;
  })
  
  .filter('mapStatusNew' , function(StatusNewConstant) {
      return function(input) {
        if(StatusNewConstant[input]) { 
		    return StatusNewConstant[input]; 
		}//fin de la condicion... 
	    else    { 
		    return 'Desconocido';
		}//fin de la condicion...
      };
  })
  
;